import os.path

from aiogram import F, Router, types
from aiogram.filters import CommandStart, StateFilter
from aiogram.fsm.context import FSMContext
from aiogram.types import FSInputFile

from tinkoff_bot.core.constants import MEDIA_FOLDER
from tinkoff_bot.infrastructure.database.services import UserService
from tinkoff_bot.tg_bot.keyboards.inline import get_participate_kb
from tinkoff_bot.tg_bot.keyboards.reply import get_main_menu_kb, get_phone_request_kb
from tinkoff_bot.tg_bot.states import RegisterSG

router = Router()


@router.message(CommandStart())
async def user_start(
    message: types.Message,
    state: FSMContext,
    user_service: UserService,
):
    """Команда старта для пользователей"""

    if not await user_service.get_user_by_telegram_id(message.from_user.id):
        await message.answer(
            "Добро пожаловать! Пожалуйста, поделитесь вашим номером телефона для регистрации.",
            reply_markup=get_phone_request_kb(),
        )
        await state.set_state(RegisterSG.send_phone)
    else:
        congratulations_text = (
            "Вы уже зарегистрированы. Желаем удачи в игре! Нажмите кнопку ниже, чтобы купить билет и участвовать."
        )
        await message.answer_photo(
            photo=FSInputFile(os.path.join(MEDIA_FOLDER, "ticket_image.png")),
            caption=congratulations_text,
            reply_markup=get_participate_kb(),
        )

        # Отправка дополнительного сообщения с основной клавиатурой
        await message.answer("Используйте меню ниже для навигации по боту.", reply_markup=get_main_menu_kb())


@router.message(F.contact, StateFilter(RegisterSG.send_phone))
async def procces_contact(message: types.Message, user_service: UserService):
    phone_number = message.contact.phone_number
    username = message.from_user.username
    if not username:
        username = message.from_user.full_name

    await user_service.create_user(message.from_user.id, phone_number, username)
    congratulations_text = (
        "Регистрация успешно завершена! Удачи в игре! Нажмите кнопку ниже, чтобы купить билет и участвовать."
    )
    await message.answer_photo(
        photo=FSInputFile(os.path.join(MEDIA_FOLDER, "ticket_image.png")),
        caption=congratulations_text,
        reply_markup=get_participate_kb(),
    )
    await message.answer("Используйте меню ниже для навигации по боту.", reply_markup=get_main_menu_kb())
